<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 4.2.1">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"www.lixiaofei.cn","root":"/","scheme":"Mist","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":false,"show_result":false,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":true,"storage":true,"lazyload":true,"nav":{"valine":{"order":-1}}},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}};
  </script>

  <meta name="description" content="免费是最贵的，这次我又深刻的体会了一次，上周搭建了 GitHub + Hexo 个人博客，由于 GitHub Pages 时好时坏，于是一顿折腾，最终将博客迁移到了阿里云的 ECS 上了，在这里整理下如何最小成本的基于 ECS 搭建博客">
<meta property="og:type" content="article">
<meta property="og:title" content="不用再忍 —— GitHub pages 迁移到 ECS">
<meta property="og:url" content="http://www.lixiaofei.cn/2020-08-04-move-blog-to-ecs/index.html">
<meta property="og:site_name" content="管窥程序">
<meta property="og:description" content="免费是最贵的，这次我又深刻的体会了一次，上周搭建了 GitHub + Hexo 个人博客，由于 GitHub Pages 时好时坏，于是一顿折腾，最终将博客迁移到了阿里云的 ECS 上了，在这里整理下如何最小成本的基于 ECS 搭建博客">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="http://www.lixiaofei.cn/images/2020/08/esc/01.jpg">
<meta property="og:image" content="http://www.lixiaofei.cn/images/2020/08/esc/02.jpg">
<meta property="article:published_time" content="2020-08-03T23:10:13.000Z">
<meta property="article:modified_time" content="2020-08-04T03:49:05.156Z">
<meta property="article:author" content="太阳雪">
<meta property="article:tag" content="Hexo">
<meta property="article:tag" content="blog">
<meta property="article:tag" content="ECS">
<meta property="article:tag" content="GIT">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="http://www.lixiaofei.cn/images/2020/08/esc/01.jpg">

<link rel="canonical" href="http://www.lixiaofei.cn/2020-08-04-move-blog-to-ecs/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-CN'
  };
</script>

  <title>不用再忍 —— GitHub pages 迁移到 ECS | 管窥程序</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">管窥程序</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
      <p class="site-subtitle" itemprop="description">Today is a gift</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="main-menu menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a>

  </li>
        <li class="menu-item menu-item-about">

    <a href="/about/" rel="section"><i class="fa fa-user fa-fw"></i>关于</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>标签</a>

  </li>
        <li class="menu-item menu-item-categories">

    <a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>分类</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a>

  </li>
  </ul>
</nav>




</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>
  <div class="reading-progress-bar"></div>

  <a href="https://github.com/alisx" class="github-corner" title="Follow me on GitHub" aria-label="Follow me on GitHub" rel="noopener" target="_blank"><svg width="80" height="80" viewBox="0 0 250 250" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://www.lixiaofei.cn/2020-08-04-move-blog-to-ecs/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.png">
      <meta itemprop="name" content="太阳雪">
      <meta itemprop="description" content="总结 技术 思考 想法">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="管窥程序">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          不用再忍 —— GitHub pages 迁移到 ECS
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-calendar"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2020-08-04 07:10:13 / 修改时间：11:49:05" itemprop="dateCreated datePublished" datetime="2020-08-04T07:10:13+08:00">2020-08-04</time>
            </span>
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-folder"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/%E5%AD%A6%E4%B8%8E%E8%B7%B5/" itemprop="url" rel="index"><span itemprop="name">学与践</span></a>
                </span>
            </span>

          
            <span id="/2020-08-04-move-blog-to-ecs/" class="post-meta-item leancloud_visitors" data-flag-title="不用再忍 —— GitHub pages 迁移到 ECS" title="阅读次数">
              <span class="post-meta-item-icon">
                <i class="fa fa-eye"></i>
              </span>
              <span class="post-meta-item-text">阅读次数：</span>
              <span class="leancloud-visitors-count"></span>
            </span>
  
  <span class="post-meta-item">
    
      <span class="post-meta-item-icon">
        <i class="far fa-comment"></i>
      </span>
      <span class="post-meta-item-text">Valine：</span>
    
    <a title="valine" href="/2020-08-04-move-blog-to-ecs/#valine-comments" itemprop="discussionUrl">
      <span class="post-comments-count valine-comment-count" data-xid="/2020-08-04-move-blog-to-ecs/" itemprop="commentCount"></span>
    </a>
  </span>
  
  

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <p>免费是最贵的，这次我又深刻的体会了一次，上周搭建了 GitHub + Hexo 个人博客，由于 GitHub Pages 时好时坏，于是一顿折腾，最终将博客迁移到了阿里云的 ECS 上了，在这里整理下如何最小成本的基于 ECS 搭建博客</p>
<a id="more"></a>
<blockquote>
<p>只看搭建过程，请直接跳转到 <a href="#buy">购买 ECS 服务器</a></p>
</blockquote>
<h2 id="免费是最贵的">免费是最贵的</h2>
<p>免费是最贵的，一点也没错，任何东西都是有成本的，成本的具体形式是多样的，时间、机会、金钱等等，免费实际上是一个片面理解，即指将成本看成了金钱，而忽视了其他成本形式，这就会造成一个片面的认知障碍，从而失去对事情的全面认识，从而有可能掉入认知陷进</p>
<p>就拿这次个人博客搭建来说吧，能提供免费资源的 Pages 一定会有成本付出的（虽然互联网产品边际成本几乎是〇），那么作为用户付出的是什么？付出的是人气，关注度，和自己的时间，作为 Pages 平台，需要更多人参与，就是人气，需要活跃度，就是你的关注，需要打造出好的作品和产品，就是你的时间和思考，有了更多的人气和参与度，Pages 本身就有了价值，从而弥补（这样说不够准确）免费提供部分的成本</p>
<p>不仅是如此，如今很多产品都是这样，微信、微博、公众号、头条、抖音等等，免费意味着你付出了非金钱之外的其他成本，只是这些成本没意识到或者不在意而已，这也是交易的内在动力，用自己有的换取自己没有的</p>
<p>如果有可能需要思考下免费后面的逻辑，对于用 GitHub Pages 来说，虽然是免费的，但不利于在国内访问，常常网络阻力不能访问，特别是将文章分享出去后，别人访问不了就很尴尬，李笑来老师的作品都是托管在 GitHub Pages 上的，为什么，因为好酒不怕巷子深，大量的粉丝想尽办法找他的作品，访问的卡顿已经不是主要问题了</p>
<p>同样的情况，对于我来说，没有知名度，在起步阶段，推广都来不及，要是访问者都看不到，就更没有机会接受读者的检验了，所以同样的情况，对于我来说，免费是更贵的，因为让我失去了展现自己推广自己的机会</p>
<p>这就是我发现 GitHub Pages 不能正常访问就必须换成其他方式的原因</p>
<h2 id="探索尝试">探索尝试</h2>
<p>在使用 ECS 搭建之前，我还尝试过用国内的 Gitee，他同样提供了 Pages，而且和 GitHub 一样方便，Hexo 也可以完全兼容，不过经过尝试之后，发现免费版的 Gitee 不能绑定自己的域名，只能用他提供的，虽然也是一个办法，但是仍有缺陷，如果要能绑定域名，需要购买企业版的 Gitee Page Pro，也就是说不是免费的。</p>
<p>这里小吐槽一下，在用 Gitee Pages 时，并没有提示说不能绑定个人域名，所以配置了解析后迷惑了好久，为啥网络可以联通却无法访问，最后在 Gitee 技术群里，有个热心的网友做了解答，我觉得应该在 Pages 上加个提示，比如 <code>如果要绑定个性域名，请升级到 Pages Pro</code>，可能更好</p>
<p>查找了一些资料，看到 <a href="https://coding.net/" target="_blank" rel="noopener">CODING</a> 也有 Pages 服务，但也有各种限制，所以没有尝试</p>
<p>之后看到了阿里云的 Web+，一个轻量级的 Web 托管服务，可以一键初始化系统环境，支持 Java、Python、Nodejs、Php 等多种，将代码打包成 zip 包，上传即可完成部署，在介绍中说，Web+ 本身不用付费，但是可能会使用的 ECS、RDS 等产品时会有费用</p>
<p>于是创建了一个 Nodejs，因为 Hexo 是建构在 Nodejs 上的，部署时，需要在 package.json 中写个启动命令，到不部署后，就可以运行了，挺好，不过因为可能产生使用费用，需要有一定的账户余额</p>
<p>第二天查看，发现几乎没小时消耗 0.1 元！一算一年需要 876 元！比直接买 ECS 服务器还贵，肯定不行</p>
<p>于是打算直接买一台 ECS 服务器，专门作为博客服务器，未来还可以做写其他程序，因为主要是博客用，所以选择配置最低的，1 核 1 G，突发式服务器，5 年优惠力度最大，鉴于博客没有名气，流量不大，所以网络选择按需付费，这样一来，5 年的使用费大概六百多块钱，平均一年一百多，每天不到四毛钱，很便宜，比起完全免费的 GitHub Pages 的不稳定性，和 Gitee Pages Pro 的服务费，这个方案经济实惠，不过需要一些设置</p>
<p>下面是纯教程，一步步教你如何搭建自己 ESC 博客服务器</p>
<p><span id='buy'></span></p>
<h2 id="1-购买-ECS-服务器">1 购买 ECS 服务器</h2>
<p>注册阿里云账号，然后登录到控制台，在产品中选择 ECS 服务器 <a href="https://ecs-buy.aliyun.com/simple" target="_blank" rel="noopener">https://ecs-buy.aliyun.com/simple</a></p>
<blockquote>
<p>通过推荐链接 <a href="https://www.aliyun.com/minisite/goods?userCode=vkibw32i" target="_blank" rel="noopener">https://www.aliyun.com/minisite/goods?userCode=vkibw32i</a> 可享最高 2000元优惠</p>
</blockquote>
<p>可以选择地区，另外常常又各种优惠地区，建议选取，会有一定折扣</p>
<p>接着选择实例规格，选择 1 v CPU 1 Gib 突发性能实例就可以，这是比较低的配置，意味着费用更低</p>
<p>突发性能实例，适合对 CPU 利用不高的场景，对于博客很适合</p>
<p>然后选择自己比较熟悉的操作系统，Liunx 操作系统需要的资源更少，建议选择，可以选择 Centos 或者 Ubuntu，因为比较常用，能找到的教程更多</p>
<p>选择公网宽带这里，需要注意，必须选择分配公网 IPv4 地址，否则无法从外网访问，就麻烦了如果选择<code>按固定宽带</code>的话，配置费用较高，因为博客系统流量不大，所以建议选择<code>按使用流量</code>，这样就可以减掉宽带费用，按流量计费的话，目前的价格是 1GB 0.8 元，很合算，带宽不需要太大，当然大点不会增加配置费用</p>
<p>最后是选择购买时长，一般越久优惠越多，最多可以购买 5 年，根据自己的需求选择就好</p>
<p>确定没问题后，点击 <code>确定订单</code> 按钮，完成支付就买好 ECS 服务器了</p>
<p><span id='logininit'></span></p>
<h2 id="2-登录及初始化">2 登录及初始化</h2>
<p>在控制台的 ECS 管理里，可以参看服务的配置，也可以设置和修改登录密码，如果在 ECS 管理里看不到购买的 ECS 服务器，可能是因为选择的区域不对，比如购买的的是 华北2 地区的服务器，地区选择的是 华北3 地区，就会看不到，这是换一下地区就好了</p>
<p>首先设置一个 root 密码，设置好后需要记住</p>
<p><img src="/images/2020/08/esc/01.jpg" alt="重置密码"></p>
<p>重置了 root 密码之后，就可以用 ssh 工具登录服务器，例如 putty、mRemote 等</p>
<blockquote>
<p>用密码登录安全性不高，应该用 ssh 证书登录，在之后的文章中会详细介绍</p>
</blockquote>
<p>用 root 用户登录之后，需要安装 git 和 nginx</p>
<p>以 CentOS 为例，安装命令是</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install git</span><br></pre></td></tr></table></figure>
<p>和</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install nginx</span><br></pre></td></tr></table></figure>
<h2 id="3-绑定域名">3 绑定域名</h2>
<p>如果有自己的域名的得话，可以将域名解析到 ECS 服务器的外网 IP 上</p>
<p>没有的话，需要先购买域名，并且对域名进行备案，之后，登录到域名供应商的管理后台，对域名进行解析</p>
<p>例如我的域名试再案例云上购买的，可以在域名中进行设置</p>
<p><img src="/images/2020/08/esc/02.jpg" alt="设置解析"></p>
<p>设置了解析之后，需要经过一段时间，才能逐渐通知到各大 DNS 服务器</p>
<p>另外由于我们还没有设置 Nginx Web 服务器，即使可以访问，也无法看到博客页面，先不要着急，等设置完了就可以了</p>
<h2 id="4-设置-GIT">4 设置 GIT</h2>
<p>GIT 是一个代码管理仓库，之前利用的是 GitHub 提供的仓库，现在我们需要自己构建一个</p>
<h3 id="创建-git-用户">创建 git 用户</h3>
<p>首先创建一个 git 用户，这是因为方便使用 git 用户来提交博客文章</p>
<p>在 root 用户之下，执行：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adduser git</span><br></pre></td></tr></table></figure>
<p>然后为 git 设置一个登录密码</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">passwd git</span><br></pre></td></tr></table></figure>
<p>完成之后，切换到 git 用户</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">su - git</span><br></pre></td></tr></table></figure>
<ul>
<li>命令中的 <code>-</code> 表示切换用户后，去用户家目录</li>
</ul>
<h3 id="创建-git-仓库">创建 git 仓库</h3>
<blockquote>
<p>以下命令都是在 git 用户下完成的，如果是在 root 用户下，请用 <code>su - git</code> 切换过来，或者在登录工具中，用 git 用户登录</p>
</blockquote>
<p>初始化一个仓库</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git init --bare hexo.git</span><br></pre></td></tr></table></figure>
<ul>
<li>参数 <code>--bare</code> 是必须加的，是为了创建一个只存储 git 历史记录的仓库，作为 git 中的源目录</li>
<li>这个命令会在 git 家 目录下创建一个 hexo.git 目录，这就是我们的源目录</li>
</ul>
<p>然后设置一个推送钩子，即当又新的代码（我们这里是文章）推送到源上来时，做一些动作</p>
<p>在 <code>hexo.git/hooks</code> 目录下创建一个脚本文件 <code>post-receives</code></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">touch hexo.git/hooks/post-receive</span><br></pre></td></tr></table></figure>
<p>用 vi 编辑文件，加入脚本，如果对 vi 不熟的话可以用其他编辑器，或者利用 WinScp 将编辑好的文件上传上去</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vi hexo.git/hooks/post-receive</span><br></pre></td></tr></table></figure>
<p>内容为：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#</span><span class="bash">!/bin/sh</span></span><br><span class="line">git --work-tree=/home/git/web/blog --git-dir=/home/git/hexo.git checkout -f</span><br></pre></td></tr></table></figure>
<blockquote>
<p>注意这里的 <code>--git-dir</code> 参数内容，是需要将文章代码更新到的目录，这个目录将要来作为 Nginx 的内容目录</p>
</blockquote>
<p>编辑内容后，需要让脚本文件课执行</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod 775 hexo.git/hooks/post-receive</span><br></pre></td></tr></table></figure>
<p>这样我们设置好了 Git 仓库，现在和 <code>本地的</code> Hexo 绑定，以便可以通过 <code>hexo deploy</code> 命令将博客代码，提交到仓库中</p>
<h3 id="配置-Hexo">配置 Hexo</h3>
<blockquote>
<p>关于 Hexo 的详细设置，请参考 <a href="http://www.lixiaofei.cn/2020-07-24-hexo-blog-guide/">免费打造个人博客系统</a></p>
</blockquote>
<p>打开 Hexo 的配置文件 <code>_config.yml</code></p>
<p>找到 <code>deploy</code> 节段，修改 repo 属性，使其支持多个仓库</p>
<figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">deploy:</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">git</span></span><br><span class="line">  <span class="attr">repo:</span></span><br><span class="line">    <span class="attr">github:</span> <span class="string">git@github.com:alisx/alisx.github.io.git</span></span><br><span class="line">    <span class="attr">hexo:</span> <span class="string">git@&lt;你的ECS外网IP&gt;:/home/git/hexo.git,master</span></span><br><span class="line">    <span class="attr">gitee:</span> <span class="string">git@gitee.com:alisx/alisx.git</span></span><br></pre></td></tr></table></figure>
<ul>
<li>可以看到，将之前的单个仓库地址，修改为多个，有 github、gitee 和 自己的 git 仓库</li>
<li>自己仓库的名字，可以随意修改，起个自己能明白的就好，比如 Hexo</li>
<li>自己仓库地址 ip 为申请的 ECS 外网ID</li>
<li>地址为 ssh 登录方式</li>
</ul>
<p>设置好后，在本地的 Hexo 目录下，就可以使用 <code>hexo deploy</code> 提交博客代码了</p>
<p>提交后，登录到服务器，查看下是否将代码同步到了指定目录，即 在 post-receive 脚本中，<code>--git-dir</code> 参数指定的目录</p>
<blockquote>
<p>如果没有同步成功，可能是因为目录权限问题，即要确保 git 用户对目标目录有<strong>读写权限</strong></p>
</blockquote>
<h2 id="5-设置-Nginx">5 设置 Nginx</h2>
<p>博客代码同步之后，需要通过外网可以访问到</p>
<p>Nginx 是一个代理 Web 服务器，以其高效和灵活，成为最常用的代理服务器之一</p>
<p>用 root 登录服务器</p>
<p>在 <code>/etc/nginx/conf.d</code> 目录下，创建一个 <code>blog.conf</code> 文件</p>
<blockquote>
<p>如果找不到 nginx 目录，说明还没有安装 nginx，参考前面 <a href="#logininit">登录及初始化</a></p>
</blockquote>
<p>然后输入以下内容：</p>
<figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">server</span> &#123;</span><br><span class="line">        <span class="attribute">listen</span>        <span class="number">80</span> default_server;</span><br><span class="line">        <span class="attribute">server_name</span> www.lixiaofei.cn;</span><br><span class="line">        <span class="attribute">access_log</span>    /var/log/nginx/access.log main;</span><br><span class="line">        <span class="attribute">root</span> /home/git/web/blog;</span><br><span class="line">        <span class="attribute">client_header_timeout</span> <span class="number">60</span>;</span><br><span class="line">        <span class="attribute">client_body_timeout</span>   <span class="number">60</span>;</span><br><span class="line">        <span class="attribute">keepalive_timeout</span>     <span class="number">60</span>;</span><br><span class="line">        <span class="attribute">gzip</span>                  <span class="literal">on</span>;</span><br><span class="line">        <span class="attribute">gzip_comp_level</span>       <span class="number">4</span>;</span><br><span class="line">        <span class="attribute">gzip_types</span> text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<ul>
<li>server_name 表示接受什么样的域名，配置为自己的个性域名</li>
<li>root 表示 Web 目录，也就是我们的博客代码，文件，需要和 <code>--git-dir</code> 指定的一样</li>
<li>剩下的保持原样就行</li>
</ul>
<p>配置完成后，保存文件，重启 nginx 服务</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl reload nginx</span><br></pre></td></tr></table></figure>
<blockquote>
<p>由于服务器 Linux 版本不同，启动服务命令可能不同，如果这个命令不好使，换成 <code>service nginx reload</code> 试试</p>
</blockquote>
<p>如果没有错误说明一起正常，这时可以通过我们的个性域名访问了</p>
<p>如果提示 <code>403 Forbidden</code> 表示权限不够，即 nginx 用户，对 Web 根目录没有读取权限</p>
<p>打开 <code>/etc/nginx/nginx.conf</code></p>
<p>找到 <code>user nginx;</code> 将其该为 <code>user git;</code> 保存，重启 nginx 服务即可</p>
<h2 id="总结">总结</h2>
<p>经过一番折腾，终于可以构建起自己的博客了，可能在过程中还有很多问题，比如访问成功，不会用 Linux 下的编辑器等问题，只要正对每个问题，找具体解决方案，就会有很多答案，所以只要耐心，就没有什么问题可以阻挡</p>
<p>虽然 ECS 方案需要花些钱，并且还需要自己折腾一整子，不过，一旦创建好有，几乎可以一劳永逸，还是值得去做的</p>
<p>这里提供我的阿里云推荐链接，如果你需要购买阿里云产品的话，可以享受最高 2000 元的优惠券及其他丰厚优惠：<a href="https://www.aliyun.com/minisite/goods?userCode=vkibw32i" target="_blank" rel="noopener">https://www.aliyun.com/minisite/goods?userCode=vkibw32i</a></p>
<h2 id="参考">参考</h2>
<ul>
<li><a href="https://zhuanlan.zhihu.com/p/58654392" target="_blank" rel="noopener">https://zhuanlan.zhihu.com/p/58654392</a></li>
<li><a href="https://www.aliyun.com/minisite/goods?userCode=vkibw32i" target="_blank" rel="noopener">https://www.aliyun.com/minisite/goods?userCode=vkibw32i</a></li>
<li><a href="https://help.aliyun.com/document_detail/108548.html" target="_blank" rel="noopener">https://help.aliyun.com/document_detail/108548.html</a></li>
</ul>

    </div>

    
    
    

      <footer class="post-footer">
          <div class="post-tags">
              <a href="/tags/Hexo/" rel="tag"># Hexo</a>
              <a href="/tags/blog/" rel="tag"># blog</a>
              <a href="/tags/ECS/" rel="tag"># ECS</a>
              <a href="/tags/GIT/" rel="tag"># GIT</a>
          </div>

        

			<div id="wechat_subscriber" style="display: block; padding: 10px 0; margin: 20px auto; width: 100%; text-align: center">
    <img id="wechat_subscriber_qcode" src="/images/wechat-qcode.png" alt="太阳雪 wechat" style="width: 200px; max-width: 100%;"/>
    <div>关注我，获得更多精彩内容</div>
</div>

        
		
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/2020-08-03-box-start/" rel="prev" title="启航">
      <i class="fa fa-chevron-left"></i> 启航
    </a></div>
      <div class="post-nav-item">
    <a href="/2020-08-05-base-logic-1/" rel="next" title="为什么总是来不及反应">
      为什么总是来不及反应 <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          
    <div class="comments" id="valine-comments"></div>

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#免费是最贵的"><span class="nav-number">1.</span> <span class="nav-text">免费是最贵的</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#探索尝试"><span class="nav-number">2.</span> <span class="nav-text">探索尝试</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#1-购买-ECS-服务器"><span class="nav-number">3.</span> <span class="nav-text">1 购买 ECS 服务器</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#2-登录及初始化"><span class="nav-number">4.</span> <span class="nav-text">2 登录及初始化</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#3-绑定域名"><span class="nav-number">5.</span> <span class="nav-text">3 绑定域名</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#4-设置-GIT"><span class="nav-number">6.</span> <span class="nav-text">4 设置 GIT</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#创建-git-用户"><span class="nav-number">6.1.</span> <span class="nav-text">创建 git 用户</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#创建-git-仓库"><span class="nav-number">6.2.</span> <span class="nav-text">创建 git 仓库</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#配置-Hexo"><span class="nav-number">6.3.</span> <span class="nav-text">配置 Hexo</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#5-设置-Nginx"><span class="nav-number">7.</span> <span class="nav-text">5 设置 Nginx</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#总结"><span class="nav-number">8.</span> <span class="nav-text">总结</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#参考"><span class="nav-number">9.</span> <span class="nav-text">参考</span></a></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image" alt="太阳雪"
      src="/images/avatar.png">
  <p class="site-author-name" itemprop="name">太阳雪</p>
  <div class="site-description" itemprop="description">总结 技术 思考 想法</div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">88</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
            <a href="/categories/">
          
        <span class="site-state-item-count">14</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
          
        <span class="site-state-item-count">47</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2022</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">太阳雪</span>
</div>
  <div class="powered-by">由 <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> & <a href="https://mist.theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Mist</a> 强力驱动
  </div>

        








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/muse.js"></script>


<script src="/js/next-boot.js"></script>




  
  <script>
    (function(){
      var canonicalURL, curProtocol;
      //Get the <link> tag
      var x=document.getElementsByTagName("link");
		//Find the last canonical URL
		if(x.length > 0){
			for (i=0;i<x.length;i++){
				if(x[i].rel.toLowerCase() == 'canonical' && x[i].href){
					canonicalURL=x[i].href;
				}
			}
		}
    //Get protocol
	    if (!canonicalURL){
	    	curProtocol = window.location.protocol.split(':')[0];
	    }
	    else{
	    	curProtocol = canonicalURL.split(':')[0];
	    }
      //Get current URL if the canonical URL does not exist
	    if (!canonicalURL) canonicalURL = window.location.href;
	    //Assign script content. Replace current URL with the canonical URL
      !function(){var e=/([http|https]:\/\/[a-zA-Z0-9\_\.]+\.baidu\.com)/gi,r=canonicalURL,t=document.referrer;if(!e.test(r)){var n=(String(curProtocol).toLowerCase() === 'https')?"https://sp0.baidu.com/9_Q4simg2RQJ8t7jm9iCKT-xh_/s.gif":"//api.share.baidu.com/s.gif";t?(n+="?r="+encodeURIComponent(document.referrer),r&&(n+="&l="+r)):r&&(n+="?l="+r);var i=new Image;i.src=n}}(window);})();
  </script>















  

  


<script>
NexT.utils.loadComments(document.querySelector('#valine-comments'), () => {
  NexT.utils.getScript('//unpkg.com/valine/dist/Valine.min.js', () => {
    var GUEST = ['nick', 'mail', 'link'];
    var guest = 'nick,mail';
    guest = guest.split(',').filter(item => {
      return GUEST.includes(item);
    });
    new Valine({
      el         : '#valine-comments',
      verify     : false,
      notify     : false,
      appId      : 'teRj7yeJj0xpfGKLJ5uFdbIu-gzGzoHsz',
      appKey     : '3uie0p1nxouCCnkjiXTEBeLd',
      placeholder: "您的关注是我的动力",
      avatar     : 'mm',
      meta       : guest,
      pageSize   : '10' || 10,
      visitor    : true,
      lang       : 'zh-cn' || 'zh-cn',
      path       : location.pathname,
      recordIP   : false,
      serverURLs : ''
    });
  }, window.Valine);
});
</script>

</body>
</html>
